/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gestionedt.modules;

import gestionedt.models.Enseignant;
import gestionedt.models.Groupe;
import gestionedt.models.Module;
import gestionedt.models.Pool;
import gestionedt.models.Prestation;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**
 * 
 */
public class ModulesForm extends org.apache.struts.action.ActionForm {
    
    private List<Module> modules;

    private int idModule;

    private Module module;

    /** Énumération des différents sous-formulaires possibles pour un module. */
    public enum SousForm {PRESTATIONS, GROUPES, POOLS}
    private SousForm sousForm;

    private List<Prestation> prestations;

    private int idPrestation;

    private List<Enseignant> enseignants;

    private String[] idEnseignantSel;

    private List<Groupe> groupes;

    private String[] idGroupeSel;

    private int idGroupe;

    private List<Pool> pools;

    private String[] idsPoolsSelectionnes;

    /**
     *
     */
    public ModulesForm() {
        super();
        this.module = new Module();
        this.sousForm = SousForm.PRESTATIONS;
        this.idEnseignantSel = new String[0];
        this.idGroupeSel = new String[0];
        this.idsPoolsSelectionnes = new String[0];
    }

    public List<Module> getModules() {
        return modules;
    }

    public void setModules(List<Module> modules) {
        this.modules = modules;
    }

    public int getIdModule() {
        return idModule;
    }

    public void setIdModule(int idModule) {
        this.idModule = idModule;
    }

    public Module getModule() {
        return module;
    }

    public void setModule(Module module) {
        this.module = module;
    }

    public SousForm getSousForm() {
        return sousForm;
    }

    public String getSousFormStr() {
        return sousForm.toString();
    }

    public void setSousForm(SousForm sousForm) {
        this.sousForm = sousForm;
    }

    public void setSousFormStr(String sousForm) {
        if(sousForm.equals("GROUPES"))
            this.sousForm = SousForm.GROUPES;
        else if(sousForm.equals("POOLS"))
            this.sousForm = SousForm.POOLS;
        else //if(sousForm.equals("PRESTATIONS"))
            this.sousForm = SousForm.PRESTATIONS;
    }

    public List<Prestation> getPrestations() {
        return prestations;
    }

    public void setPrestations(List<Prestation> prestations) {
        this.prestations = prestations;
    }

    public int getIdPrestation() {
        return idPrestation;
    }

    public void setIdPrestation(int idPrestation) {
        this.idPrestation = idPrestation;
    }

    public List<Enseignant> getEnseignants() {
        return enseignants;
    }

    public void setEnseignants(List<Enseignant> enseignants) {
        this.enseignants = enseignants;
    }

    public String[] getIdEnseignantSel() {
        return idEnseignantSel;
    }

    public int getIdIntEnsSel() {
        if(idEnseignantSel.length > 0) {
            try {
                return Integer.parseInt(idEnseignantSel[0]);
            } catch(NumberFormatException e) {}
        }
        return 0;
    }

    public void setIdEnseignantSel(String[] idEnseignantSel) {
        this.idEnseignantSel = idEnseignantSel;
    }

    public List<Groupe> getGroupes() {
        return groupes;
    }

    public void setGroupes(List<Groupe> groupes) {
        this.groupes = groupes;
    }

    public String[] getIdGroupeSel() {
        return idGroupeSel;
    }

    public int getIdIntGrpSel() {
        if(idGroupeSel.length > 0) {
            try {
                return Integer.parseInt(idGroupeSel[0]);
            } catch(NumberFormatException e) {}
        }
        return 0;
    }

    public void setIdGroupeSel(String[] idGroupeSel) {
        this.idGroupeSel = idGroupeSel;
    }

    public int getIdGroupe() {
        return idGroupe;
    }

    public void setIdGroupe(int idGroupe) {
        this.idGroupe = idGroupe;
    }

    public List<Pool> getPools() {
        return pools;
    }

    public void setPools(List<Pool> pools) {
        this.pools = pools;
    }

    public String[] getIdsPoolsSelectionnes() {
        return idsPoolsSelectionnes;
    }

    public int[] getIdsIntPoolsSelectionnes() {
        int[] ids = new int[idsPoolsSelectionnes.length];
        int i = 0;
        for(String id : idsPoolsSelectionnes)
            ids[i++] = Integer.parseInt(id);
        return ids;
    }

    public void setIdsPoolsSelectionnes(String[] idsPoolsSelectionnes) {
        this.idsPoolsSelectionnes = idsPoolsSelectionnes;
    }

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param request The HTTP Request we are processing.
     * @return
     */
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if(module.getLibelle() == null || module.getLibelle().trim().length() < 1)
            errors.add("module.libelle", new ActionMessage("errors.required",
                                                           "Le champ libellé"));
        if(module.getEffectifMax() < 1)
            errors.add("module.effectifMax", new ActionMessage("errors.detail",
                                                               "L'effectif max doit être un nombre " +
                                                               "entier supérieur à 0."));
        return errors;
    }

    public ActionMessages validatePrestation(ActionMapping mapping, HttpServletRequest request) {
        ActionMessages messages = new ActionMessages();
        if(idEnseignantSel == null
                || idEnseignantSel.length < 1
                || idEnseignantSel[0]==null
                || idEnseignantSel[0].trim().length() < 1)
            messages.add("idEnseignantSel", new ActionMessage("errors.required", "Le champ enseignant"));

        return messages;
    }

    public ActionMessages validateInscripGroupe(ActionMapping mapping, HttpServletRequest request) {
        ActionMessages messages = new ActionMessages();
        if(idGroupeSel == null
                || idGroupeSel.length < 1
                || idGroupeSel[0]==null
                || idGroupeSel[0].trim().length() < 1)
            messages.add("idGroupeSel", new ActionMessage("errors.required", "Le champ groupe"));

        return messages;
    }

}
